package com.qinghuan.ssm.controller;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qinghuan.ssm.pojo.Emp;
import com.qinghuan.ssm.pojo.Msg;
import com.qinghuan.ssm.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;

import javax.jws.WebParam;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: dubao
 * @Date: 2022/4/23 10:37
 * @Description:
 */
@Controller
public class EmpController {

    @Autowired
    EmpService empService;

    /**
     * 导入jsckson包
     * @param pn
     * @return
     */
    @RequestMapping("/emps")
    @ResponseBody
    public Msg getEmpsWithJson(
            @RequestParam(value = "pn", defaultValue = "1") Integer pn) {
        //引入PageHelper分页插件
        //在查询之前只需要调用，传入页码，以及每页的大小
        PageHelper.startPage(pn, 5);
        //startPage后面紧跟的这个查询就是一个分页查询
        List<Emp> emps = empService.getAll();
        //使用pageInfo包装查询结果，只需要将pageInfo交给页面就行了
        //封装了详细的分页信息
        PageInfo page = new PageInfo(emps);

        return Msg.success().add("pageInfo", page);
    }

    /**
     * 员工保存
     * 1、支持JSR303校验，需要导入Hibernate-Validator
     * @param emp
     * @return
     */
    @RequestMapping(value = "/insertEmp", method = RequestMethod.POST)
    @ResponseBody
    public Msg addEmpWithJson(@Valid Emp emp, BindingResult result) {
        if (result.hasErrors()) {
            //校验失败，应该返回失败，在框中显示校验失败的错误信息
            Map<String, Object> map = new HashMap<String, Object>();
            List<FieldError> errors = result.getFieldErrors();
            for (FieldError fieldError : errors) {
                System.out.println("错误的字段名：" + fieldError.getField());
                System.out.println("错误信息：" + fieldError.getDefaultMessage());
                map.put(fieldError.getField(), fieldError.getDefaultMessage());
            }
            return Msg.fail().add("errorFields", map);
        } else {
            empService.insert(emp);
            return Msg.success();
        }
    }

    /**
     * 查询员工数据
     * @return
     */
    //@RequestMapping("/emps")
    public String getEmps(@RequestParam(value = "pn", defaultValue = "1") Integer pn, Model model) {

        //引入PageHelper分页插件
        //在查询之前只需要调用，传入页码，以及每页的大小
        PageHelper.startPage(pn, 5);
        //startPage后面紧跟的这个查询就是一个分页查询
        List<Emp> emps = empService.getAll();
        //使用pageInfo包装查询结果，只需要将pageInfo交给页面就行了
        //封装了详细的分页信息
        PageInfo page = new PageInfo(emps);
        model.addAttribute("pageInfo", page);
        page.getNavigatepageNums();

        return "list";
    }

    /**
     * 员工更新
     * @param emp
     * @return
     */
    @RequestMapping(value = "/emp/{id}", method = RequestMethod.PUT)
    @ResponseBody
    public Msg saveEmp(Emp emp) {
        empService.updateEmp(emp);
        return Msg.success();
    }

    /**
     * 根据id查询
     * @param id
     * @return
     */
    @RequestMapping(value = "/emp/{id}", method = RequestMethod.GET)
    @ResponseBody
    public Msg getEmp(@PathVariable(value = "id") Integer id) {
        Emp emp = empService.getEmp(id);

        return Msg.success().add("emp", emp);
    }

}
